package br.com.erpcortume.services;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.erpcortume.beans.Adiantamento;
import br.com.erpcortume.beans.Funcionario;
import br.com.erpcortume.beans.Salario;
import br.com.erpcortume.enums.EnumCargo;
import br.com.erpcortume.repositorio.AdiantamentoRepositorio;
import br.com.erpcortume.repositorio.CargoRepositorio;
import br.com.erpcortume.repositorio.FuncionarioRepositorio;

@Service
public class FuncionarioServices {
	
	@Autowired
	private FuncionarioRepositorio funcionarioRepositorio;
	
	@Autowired
	private CargoRepositorio cargoRepositorio;
	
	@Autowired
	private AdiantamentoRepositorio adiantamentoRepositorio;


	public void salvar(Funcionario funcionario) {
		
		
		funcionario.getContato().setNomeContato(funcionario.getNome());
		
		if (EnumCargo.REPRESENTANTE.getId() == funcionario.getCargo().getId()) {
			funcionario.setRepresentante(true);
		}
		
		if(funcionario.getId() != null){
			funcionarioRepositorio.editar(funcionario);
		} else {
			funcionario.setSalario(new Salario());
			funcionarioRepositorio.salvar(funcionario);
		}
	}
	
	public void excluir(Long id){
		funcionarioRepositorio.excluir(funcionarioRepositorio.loadById(id));
	}
	
	public Funcionario loadById(Long id){
		return funcionarioRepositorio.loadById(id);
	}
	
	public List<Funcionario> listar(){
		return funcionarioRepositorio.listar();
	}
	
	

	public void remunerar(Funcionario funcionario, String valor, String adiantamento) {
		
		List<Adiantamento> adiantamentos = new ArrayList<Adiantamento>();
		
		if (funcionario.getAdiantamentos().isEmpty()) {
			
			adiantamentos.add( new Adiantamento(new BigDecimal(adiantamento)) );
			
			funcionario.setAdiantamentos(adiantamentos);
			
			funcionario.getAdiantamentos().iterator().next().setFuncionario(funcionario);
			
		}else {
		
			if (!StringUtils.isBlank(adiantamento)) {
				adiantamentos = funcionario.getAdiantamentos();
				Adiantamento a = new Adiantamento(new BigDecimal(adiantamento));
				a.setFuncionario(funcionario);
				adiantamentos.add( a );
			}
			
		}

		if (funcionario.getSalario() == null) {
			funcionario.setSalario(new Salario());
		}
		
		funcionario.getSalario().setValor(new BigDecimal(valor));
		
		funcionarioRepositorio.editar(funcionario);
	}
	
	public Double listTotalAdiantamentos(Funcionario funcionario) {

		double total = 0;
		
		List<Adiantamento> adiantamentos = funcionario.getAdiantamentos();
		for (Adiantamento a : adiantamentos) {
			BigDecimal valor = a.getValor();
			if (valor != null) {
				total += valor.doubleValue();
			}
		}
		return total;
	}
	
	public List<Funcionario> listFuncionariosByCargo(EnumCargo cargo){
		return funcionarioRepositorio.getFuncionarioByCargo(cargo);
	}


}
